package code.xml;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class XMLSourceConfig {
	
	private Document document;

	public Document getDocument() {
		return document;
	}

	public void setDocument(String docPath) {
		SAXBuilder sax = new SAXBuilder();
		try {
			document = sax.build(new File(System.getProperty("user.dir") + "/src/main/resources/" + docPath));
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 获得xml文档的根元素
	 * @return
	 */
	public Element getSourceConfigRootElement(){
		return this.document.getRootElement();
	}
	/**
	 * 获得指定路径的文档节点元素，以"."间隔各级路径，如 parent.own.child
	 * 如果同级节点有多个，则只取第1个节点
	 * @param name
	 * @return
	 */
	public Element getChildElement(String name){
		Element element = getSourceConfigRootElement();
		String[] nodeNames = name.split("\\.");
		for(int i=0; i<nodeNames.length; i++){
			element = element.getChild(nodeNames[i]);			
		}
		return element;
	}
	/**
	 * 获得指定路径的文档节点元素，以"."间隔各级路径，如 parent.own.child
	 * 如果中间节点有多个，则只取第1个节点，只有最后的末级节点会取得所有的元素
	 * @param name
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Element> getChildElements(String name){
		List<Element> childElements = new ArrayList<Element>();
		Element element = getSourceConfigRootElement();
		String[] nodeNames = name.split("\\.");
		for(int i=0; i<nodeNames.length; i++){
			if((i+1) < nodeNames.length){
				element = element.getChild(nodeNames[i]);
			}
			else{
				childElements = element.getChildren(nodeNames[i]);
			}			
		}
		return childElements;
	}
}
